package com.itheima;

/**
 * 2025/4/18 19:43
 * 演示多态下的强制类型转换
 */
public class Test {

    public static void main(String[] args) {
        Animal a1 = new Dog();
        Animal a2 = new Cat();

//        //将a1强制转换为Dog类型，多态的向下转型（父类引用类型转换成子类类型）
//        Dog dog = (Dog)a2;
//        Cat cat = (Cat) a1;
//
//        //就可以调用子类对象中特有的方法了
//        dog.watchHome();
//        cat.catchMouse();

        show(a1);
        show(a2);

    }
    public static void show(Animal animal) {

        animal.sound();
        //在强制类型转换的时候，为了避免ClassCastException错误，需要先判断当前对象的真实类型，如果类型匹配，然后再强转
        //新一个关键词（字） instanceof
        //判断当前对象是否是Dog类型
        if (animal instanceof Dog) {
            //健壮性很好
            Dog dog = (Dog) animal;
            dog.watchHome();
        }
        if (animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }

    }

}
